
import { useMemberStore } from '@/stores'

const baseURL = "https://pcapi-xiaotuxian-front-devtest.itheima.net"

/// 配置请求拦截器
const httpIntercepter = {
    invoke(options: UniApp.RequestOptions) {
        // 1、非http开头需要拼接地址
       if(options.url && ! options.url.startsWith("http")){
          options.url = baseURL + options.url;
       }

        // 2、请求超时
        options.timeout = 10000;

        //3、添加小程序请求头标识
        options.header = {
            ...options.header,
            "source-client": "miniapp",
        }
        //4、添加token
        const memberStore = useMemberStore();
        const token = memberStore.profile?.token;
        if(token){
            options.header.Authorization = token;
        }
          
    }
}
uni.addInterceptor("request", httpIntercepter);
uni.addInterceptor("uploadFile", httpIntercepter);

interface Data<T>{
    code:string;
    msg:string,
    result:T
}

// 封装请求函数
export const http = <T>(options:UniApp.RequestOptions) => {   
    return new Promise<Data<T>>((resolve, reject) => {
        uni.request({
            ...options,
            /// 请求成功
           success:(res) =>{
    
            if(res.statusCode >= 200 && res.statusCode < 300){
              resolve(res.data as Data<T>);
            }else if(res.statusCode == 401){
                /// token失效
                const memberStore = useMemberStore()
                memberStore.clearProfile()
                uni.navigateTo({
                    url: "/pages/login/login"
                })
                reject(res)
            }else{
                uni.showToast({
                    icon:"none",
                    title:(res.data as Data<T>).msg || "请求错误"
                })
                reject(res)
            }
            
           },
           fail:(err) => {
            uni.showToast({
                icon:"none",
                title:"网络错误，请换个网络试试"
            })
            reject(err);
           }
        })
    });
}